package org.springframework.util;

import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;

public abstract class ReflectionUtil {

    public static void makeAccessible(Constructor<?> ctor) {
        //检查构造方法是否是public，构造方法所在类是否public，
        //isAccessible: 
        //值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。
        //值为 false 则指示反射的对象应该实施 Java 语言访问检查
        if ((!Modifier.isPublic(ctor.getModifiers()) || !Modifier.isPublic(ctor.getDeclaringClass().getModifiers()))
                && !ctor.isAccessible()) {
            //如果构造方法及其所在类的修饰符不是public,  反射对象时取消java语言访问检查
            ctor.setAccessible(true);
        }
    }
}
